先看一次假想的故障复盘。周一上午九点十分,一家做在线CRM的SaaS平台,客服群里开始刷屏:页面转圈,数据加载不出来。排查发现,一位大客户正在导入十万条客户数据,导入任务占满了数据库连接,另外几百家租户的请求全被堵在后面。服务器没有坏,缺的是隔离和限流。这次事故的每个环节,都对应着选云服务商时要想的一件事。
事故暴露的,正是SaaS对服务器最特殊的要求。多个企业客户同时在线,彼此的使用节奏并不一致;不同租户的计算和存储需求差别很大,大客户一次操作的负载,抵得上几十个小客户;用户规模增长,资源消耗持续上升;数据库、缓存和应用服务各有各的负载特征;平台还得一边持续运行,一边不停更新版本。
先把自己的系统拆开看。前端访问层处理页面和请求,对带宽和并发敏感;业务应用层跑核心逻辑,吃CPU和内存;数据存储层管着各租户的数据,吃磁盘读写和稳定性;缓存层挡住重复查询,保护数据库;接口服务层对接外部系统和第三方API,对网络连通性要求高。五层的资源需求不同,不该一台服务器通吃。开头那次事故里,应用和数据库放在同一台机器上,就是放大损失的原因之一。
多租户的资源问题,核心是别让一个租户拖垮其他租户。计算资源要给每个租户设上限或者排队机制;数据隔离和访问权限,要保证A租户看不到B租户的数据;大客户的批量任务,要放进独立队列或者错峰执行;数据库连接数要按租户或服务限流,连接被一个任务占光,其他人就只能等;高峰时段,资源要能向最紧要的业务倾斜。
数据库的隔离模式有三种。共享数据库,所有租户共用库和表,靠租户ID区分,成本最低,隔离最弱,适合租户多、单个数据量小的场景;独立数据库,每个租户一个库,隔离强,管理成本高,适合大客户和对数据安全要求严格的行业;混合模式,小客户共享,大客户独立,是不少SaaS平台最后走到的方案。
CPU看并发请求量和业务计算量,批量任务、报表导出这类重计算要单独估算;内存看应用实例数量和缓存需求,实例越多、缓存越大,需求越高;存储优先SSD,数据库和业务文件的读写都吃盘,还要为租户数据的增长留出空间;带宽看用户访问和API调用量,企业客户的接口调用往往比页面访问更密集。扩展上,给应用实例和数据库留出升级空间,别等资源用到九成才想起来扩。
用户规模会持续增加;有的客户会集中访问,比如月底结账、季度报表;新功能上线会带来新的负载;不同租户的高峰时间并不一致,有的在早上,有的在月初;后续进入多个国家,还要再开新节点。这些都意味着资源不能一次买死,要选支持灵活升级、可以增加实例的服务商。
应用与数据库分离,各自按需扩展,互不抢资源;负载均衡把请求分到多个应用实例,一台出问题不影响整体;缓存挡掉重复查询,数据库的压力能下来一大截;CDN接走静态资源,源站只处理业务请求;监控系统负责发现瓶颈,CPU、内存、连接数、慢查询,哪一项先到顶,一眼就能看出来。回到开头的事故,如果当时有连接数监控和告警,十分钟内就能定位。
多租户的数据隔离是底线;身份认证和权限管理要细到角色;数据加密和访问审计,要能回答“谁在什么时间看了什么”;备份和恢复机制,最好能恢复到指定租户、指定时间点,这比整库恢复更实用;系统漏洞和网络安全防护不能松懈,SaaS平台本身就是攻击目标;数据存放在哪里,也要对照合规要求,面向不同国家的客户时尤其要留意。
监控和性能告警要提前部署,别等客户来报障;定期备份,并且演练恢复;版本发布要有环境隔离,开发、测试、生产分开,发布能灰度、能回滚;应用服务的扩展方案要提前设计,什么指标触发扩容,扩多少;还要有异常恢复和业务连续性的预案,出事时按预案走。
需要说明,云服务器、数据库和CDN提供的是底层资源,并不能自动替代SaaS平台自身的多租户隔离、发布系统和应用运维能力,这些要靠产品自己的架构和团队来做。服务商再好,也代替不了开头那次事故里本该做的限流和隔离。
恒讯科技并不是提供完整SaaS应用开发平台的服务商,能提供的是底层基础设施。官网有不同配置的云服务器,可弹性升级,云服务器页面介绍了控制台管理和资源监控;官网的云数据库MySQL页面介绍了数据库监控、自动备份、只读实例和配置扩展,并列出云服务器、负载均衡、CDN和对象存储等关联产品,大致对应前面说的应用层、数据层和分发层;CDN节点超过500个,用于静态资源加速;服务器节点覆盖香港、美国、欧洲、东南亚等地区,业务扩到新市场时可以就近增加节点。
需要多少台云服务器?
起步阶段,应用一两台加一台数据库就够,关键是应用和数据库分开,后面按监控指标再增加。
多租户数据库怎么配?
租户多而小,用共享库;大客户或者安全要求高的,用独立库;两种都有,就用混合模式。
需要负载均衡吗?
只要应用实例多于一台,或者想做到不停机发布,就需要。
业务增长后怎么扩容?
先看监控,判断瓶颈在应用、数据库还是缓存:应用层加实例,数据库层先读写分离、加只读实例,再考虑分库分表。
云数据库还是自建?
团队运维力量有限、希望省心,选云数据库,监控和备份是现成的;对数据库有深度定制需求,才考虑自建,代价是备份、监控和高可用都要自己负责。
普通IDC服务商能满足SaaS部署吗?
能提供服务器、网络和数据库等基础资源,就能满足底层需要,多租户隔离、发布系统和应用运维则要平台自己承担,所以要看服务商的资源是否灵活、支持范围是否写得清楚。
Copyright © 2013-2020. All Rights Reserved. 恒讯科技 深圳市恒讯科技有限公司 粤ICP备20052954号 IDC证:B1-20230800.移动站


